from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import serializers
from django_redis import get_redis_connection
from utils.ytx_sdk.sendSMS import CCP
from random import randint
from celery_tasks.sms.tasks import sms_send

class SMSCodeView(APIView):
    '''
        当前输出结果是字典，没有对象所以不需要序列化操作
        接收手机号，在正则中已经验证，而且不涉及关系数据库保存
        所以不需要反序列化操作
    '''

    def get(self,request,mobile):
        '''
        接收手机号，发送短信验证码
        :param request:
        :param mobile:
        :return:
        '''


        redis_cli = get_redis_connection('verify_code')
        sms_flag = redis_cli.get('sms_flag_'+mobile)

        if sms_flag:
            raise serializers.ValidationError('请稍后再发送验证码')
        sms_code = str(randint(100000,999999))
        # 保存短信验证码与发送记录
        # 设置带有效期的数据，单位是秒
        # 存验证码300秒
        # redis_cli.setex("sms_flag_"+mobile,300,sms_code)
        # 保存发送标记，60秒
        # redis_cli.setex('sms_flag_'+mobile,60,1)

        # 优化redis交互，减少通信的次数，管道pipenline
        redis_pi = redis_cli.pipeline()
        redis_pi.setex('sms_code_'+mobile,300,sms_code)
        redis_pi.setex('sms_flag_'+mobile,60,1)
        redis_pi.execute()

        # 发送短信
        # CCP.sendTemplateSMS(mobile,sms_code,5,1)
        # print(sms_code)
        sms_send.delay(mobile,sms_code,5,1)
        print(sms_code)
        return Response({'message':'ok'})